/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.kaetec.listeners;

import br.com.kaetec.dao.ClienteTableModel;
import br.com.kaetec.dao.ContatoTableModel;
import br.com.kaetec.entities.Cliente;
import br.com.kaetec.entities.Contato;
import br.com.kaetec.entities.SexoType;
import br.com.kaetec.services.ClienteService;
import br.com.kaetec.views.BrowseClientesForm;
import br.com.kaetec.views.ClientesForm;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

/**
 *
 * @author Sergio Artero
 */
public class ClienteActionListener implements ActionListener{

    ClientesForm formClientes;
    BrowseClientesForm formBrwClientes;
    ClienteService clienteService;
    ContatoTableModel contatoModel;
    ClienteTableModel clienteModel;
//    int selectedRow = -1;
    
    public ClienteActionListener(BrowseClientesForm formBrwClientes, ClientesForm formClientes){
        this.formBrwClientes = formBrwClientes;
        this.formClientes = formClientes;     
        clienteService = new ClienteService();
        formBrwClientes.getJtTableCliente().changeSelection(0, 0, false, false);
        attachClienteFormListener();
        beginTableModelContatosAndEndereco(null);
    }
    
    public ClienteActionListener(BrowseClientesForm formBrwClientes){
        this.formBrwClientes = formBrwClientes;
        clienteService = new ClienteService();
        attachBrwClienteFormListener();
        beginTableModelClientes();
    }
    
    @Override
    public void actionPerformed(ActionEvent event) {        
        
        String botaoClicado = event.getActionCommand();
        
        if ( botaoClicado.equals("Incluir") ) {
            formClientes = new ClientesForm( formBrwClientes );
            formClientes.setVisible(true);
//            if ( !formClientes.isEnabled() ) new BrowseClientesForm().setVisible(true);
        }
        
        if ( botaoClicado.equals("Alterar") ) {
        	
        	formClientes = new ClientesForm( formBrwClientes );
        	setClienteFromForm();
        	formClientes.setVisible(true);
        	
        }
        
        if ( botaoClicado.equals("Excluir") ) {
            
            long idCliente = getIdFromClientePosicionado();
            if (clienteService.excluirClienteForId( idCliente )){
                JOptionPane.showMessageDialog(formClientes, "Cliente excluido!","Excluir", JOptionPane.INFORMATION_MESSAGE); 
                beginTableModelClientes();
            }
            
        }
        
        if ( botaoClicado.equals("Salvar") ) {
            
            Cliente newCliente = getClienteFromForm();                
            if ( clienteService.salvar(newCliente) ){
                JOptionPane.showMessageDialog(formClientes, "Cliente salvo!","Salvar", JOptionPane.INFORMATION_MESSAGE); 
                beginTableModelClientes();
            }
            else{
                JOptionPane.showMessageDialog(formClientes, "Cliente não salvo!","Erro", JOptionPane.ERROR_MESSAGE); 
            }
            formClientes.dispose();
            
        }
        
        if ( botaoClicado.equals("Cancelar") ){
            
            formClientes.dispose();
            
        }
        
    }
    
    private long getIdFromClientePosicionado() {
    	return (long) formBrwClientes.getJtTableCliente().getValueAt(formBrwClientes.getJtTableCliente().getSelectedRow(), 0);    	
    }
    
//    private void jTable1MousePressed(java.awt.event.MouseEvent evt) {                                     
//
//        ListSelectionModel row = formBrwClientes.getJtTableCliente().getSelectionModel();
//
//        row.addListSelectionListener(new ListSelectionListener(){
//            
//            @Override
//            public void valueChanged(ListSelectionEvent e) 
//            {
//                ListSelectionModel lsm = (ListSelectionModel) e.getSource();
//                selectedRow = lsm.getMinSelectionIndex();
//
//            }
//        });
//    }
    
    public void beginTableModelContatosAndEndereco( Cliente cliente ){
        
        List<Contato> contatos = new ArrayList<Contato>();
        
        if ( cliente != null ){
            contatos = clienteService.getContatos( cliente );
        }else{
            Contato contatoVazio = new Contato();            
            contatos.add(contatoVazio);
        }
        contatoModel = new ContatoTableModel( contatos );
        formClientes.getJtbTableContatos().setModel(contatoModel);
    }
    
    private void beginTableModelClientes(){
        
        clienteModel = new ClienteTableModel( clienteService.getAllClientes() );
        formBrwClientes.getJtTableCliente().setModel(clienteModel);
        
    }
    
    private Cliente getClienteFromForm(){
        
        Cliente cliente = new Cliente();
        
        String id = formClientes.getLblIdConteudo().getText().toString();
        if ( !"".equals( id ) && ( Long.parseLong( id ) > 0 ) ) {
            cliente.setId( Long.parseLong( id ) );
        }
        
        cliente.setNome( formClientes.getTxtNome().getText() );
        cliente.setRg( formClientes.getTxtRg().getText() );
        cliente.setCpf(formClientes.getTxtCpf().getText());
        
        switch (formClientes.getCbxSexo().getSelectedItem().toString()) {
            
            case "Masculino":
                cliente.setSexo(SexoType.M);
                break;
                
            case "Feminino":
                cliente.setSexo(SexoType.F);
                break;
            
        }
        
        return cliente;
    }
    
    private void setClienteFromForm(){
    	
    	int selectedCliente = formBrwClientes.getJtTableCliente().getSelectedRow();
        Cliente cliente = clienteService.getClienteForId( getIdFromClientePosicionado() );

        formClientes.getLblIdConteudo().setText( String.valueOf( cliente.getId() ));
    	formClientes.getTxtNome().setText( cliente.getNome() );
    	formClientes.getTxtRg().setText( cliente.getRg() );
    	formClientes.getTxtCpf().setText( cliente.getCpf() );
    	
    	switch ( cliente.getSexo().toString() ) {
		
            case "M":
                formClientes.getCbxSexo().setSelectedIndex(0);
                break;
		
            case "F":
                formClientes.getCbxSexo().setSelectedIndex(1);
                break;

            default:
                break;
	}
    	
    }
    
    private void attachClienteFormListener(){
        formClientes.getBtSalvar().addActionListener(this);
        formClientes.getBtCancelar().addActionListener(this);
    }    
    
    private void attachBrwClienteFormListener(){
        formBrwClientes.getBtIncluir().addActionListener(this);
        formBrwClientes.getBtAlterar().addActionListener(this);
        formBrwClientes.getBtExcluir().addActionListener(this);
    }
    
}
